/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.modules.st.service;

import java.util.ArrayList;
import java.util.List;

import com.jeesite.common.collect.ListUtils;
import com.jeesite.modules.st.dao.StWorkListDao;
import com.jeesite.modules.st.entity.*;
import com.jeesite.modules.st.utils.BillUtil;
import org.hibernate.validator.constraints.Length;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jeesite.common.entity.Page;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.st.dao.StProductBillDao;
import com.jeesite.modules.st.dao.StProductBillBatchDetailDao;
import com.jeesite.modules.st.dao.StProductBillDetailDao;

/**
 * 生产工单Service
 *
 * @author HOHD
 * @version 2020-12-19
 */
@Service
@Transactional(readOnly = true)
public class StProductBillService extends CrudService<StProductBillDao, StProductBill> {

    @Autowired
    private StProductBillBatchDetailDao stProductBillBatchDetailDao;

    @Autowired
    private StProductBillDetailDao stProductBillDetailDao;

    /**
     * 获取单条数据
     *
     * @param stProductBill
     * @return
     */
    @Override
    public StProductBill get(StProductBill stProductBill) {
        StProductBill entity = super.get(stProductBill);
        if (entity != null) {
            StProductBillBatchDetail stProductBillBatchDetail = new StProductBillBatchDetail(entity);
            stProductBillBatchDetail.setStatus(StProductBillBatchDetail.STATUS_NORMAL);
            entity.setStProductBillBatchDetailList(stProductBillBatchDetailDao.findList(stProductBillBatchDetail));
            StProductBillDetail stProductBillDetail = new StProductBillDetail(entity);
            stProductBillDetail.setStatus(StProductBillDetail.STATUS_NORMAL);
            entity.setStProductBillDetailList(stProductBillDetailDao.findList(stProductBillDetail));
        }
        return entity;
    }

    public Page<StProductBillDetail> findRetrospect(StProductBillDetail stProductBillDetail) {
        Page<StProductBillDetail> page = (Page<StProductBillDetail>) stProductBillDetail.getPage();
//	page.setPageSize(Page.PAGE_SIZE_NOT_PAGING); 	// 不分页，返回全部数据。
//	page.setCount(Page.COUNT_NOT_COUNT);  			// 不执行Count，不查询总数。
//	page.setCount(Page.COUNT_ONLY_COUNT); 			// 只Count数据，不返回数据，通过 page.getCount()获取
        page.setList(stProductBillDetailDao.findRetrospect(stProductBillDetail));
        return page;
    }

    public Page<StProductBillBatchDetail> materialRetrospect(StProductBillBatchDetail stProductBillBatchDetail) {
        Page<StProductBillBatchDetail> page = (Page<StProductBillBatchDetail>) stProductBillBatchDetail.getPage();
//	page.setPageSize(Page.PAGE_SIZE_NOT_PAGING); 	// 不分页，返回全部数据。
//	page.setCount(Page.COUNT_NOT_COUNT);  			// 不执行Count，不查询总数。
//	page.setCount(Page.COUNT_ONLY_COUNT); 			// 只Count数据，不返回数据，通过 page.getCount()获取
        page.setList(stProductBillBatchDetailDao.materialRetrospect(stProductBillBatchDetail));
        return page;
    }

    @Autowired
    StWorkListDao stWorkListDao;

    public Page<StWorkList> productData(StWorkList stWorkList) {
        Page<StWorkList> page = (Page<StWorkList>) stWorkList.getPage();
//	page.setPageSize(Page.PAGE_SIZE_NOT_PAGING); 	// 不分页，返回全部数据。
//	page.setCount(Page.COUNT_NOT_COUNT);  			// 不执行Count，不查询总数。
//	page.setCount(Page.COUNT_ONLY_COUNT); 			// 只Count数据，不返回数据，通过 page.getCount()获取
        page.setList(stWorkListDao.productData(stWorkList));
        return page;
    }

    /**
     * 查询分页数据
     *
     * @param stProductBill 查询条件
     * @return
     */
    @Override
    public Page<StProductBill> findPage(StProductBill stProductBill) {
        return super.findPage(stProductBill);
    }

    public Page findDetail(StProductBillBatchDetail detail) {
        Page<StProductBillBatchDetail> page = (Page<StProductBillBatchDetail>) detail.getPage();
//	page.setPageSize(Page.PAGE_SIZE_NOT_PAGING); 	// 不分页，返回全部数据。
//	page.setCount(Page.COUNT_NOT_COUNT);  			// 不执行Count，不查询总数。
//	page.setCount(Page.COUNT_ONLY_COUNT); 			// 只Count数据，不返回数据，通过 page.getCount()获取
        page.setList(stProductBillBatchDetailDao.findDetail(detail));
        return page;
    }

    public List<StProductBillBatchDetail> findDetailNoPage(StProductBillBatchDetail detail) {
        return stProductBillBatchDetailDao.findDetail(detail);
    }

    public void setBillStatus(String ids) {
//        if (ids.endsWith(",")) ids = ids.substring(0, ids.length() - 1);

        dao.setBillStatus(ids.split(","));
    }

    @Autowired
    BillUtil billUtil;

    /**
     * 保存数据（插入或更新）
     *
     * @param stProductBill
     */
    @Override
    @Transactional(readOnly = false)
    public void save(StProductBill stProductBill) {
        if (stProductBill.getIsNewRecord()) {
            String b1 = billUtil.billNo(BillUtil.BillType.productBill);
            stProductBill.setBillNo(b1);
            String batchNo = billUtil.billNo(BillUtil.BillType.batchNo);
            List<StProductBillBatchDetail> list = new ArrayList<>();
            Integer productBatch = stProductBill.getProductBatch();
            for (int i = 0; i < productBatch; i++) {
                StProductBillBatchDetail stProductBillBatchDetail = new StProductBillBatchDetail();
                stProductBillBatchDetail.setBatchNumber(batchNo + String.format("%02d", (i + 1)));
                stProductBillBatchDetail.setGroundStatus(1);
                stProductBillBatchDetail.setPackingAugerStatus(1);
                stProductBillBatchDetail.setSmallMaterialStatus(1);
                list.add(stProductBillBatchDetail);
            }
            stProductBill.setStProductBillBatchDetailList(list);
        }
        super.save(stProductBill);
        // 保存 StProductBill子表
        for (StProductBillBatchDetail stProductBillBatchDetail : stProductBill.getStProductBillBatchDetailList()) {
            if (!StProductBillBatchDetail.STATUS_DELETE.equals(stProductBillBatchDetail.getStatus())) {
                stProductBillBatchDetail.setParentId(stProductBill);
                if (stProductBillBatchDetail.getIsNewRecord()) {
                    stProductBillBatchDetailDao.insert(stProductBillBatchDetail);
                } else {
                    stProductBillBatchDetailDao.update(stProductBillBatchDetail);
                }
            } else {
                stProductBillBatchDetailDao.delete(stProductBillBatchDetail);
            }
        }
        // 保存 StProductBill子表
        for (StProductBillDetail stProductBillDetail : stProductBill.getStProductBillDetailList()) {
            if (!StProductBillDetail.STATUS_DELETE.equals(stProductBillDetail.getStatus())) {
                stProductBillDetail.setParentId(stProductBill);
                if (stProductBillDetail.getIsNewRecord()) {
                    stProductBillDetailDao.insert(stProductBillDetail);
                } else {
                    stProductBillDetailDao.update(stProductBillDetail);
                }
            } else {
                stProductBillDetailDao.delete(stProductBillDetail);
            }
        }
    }

    /**
     * 更新状态
     *
     * @param stProductBill
     */
    @Override
    @Transactional(readOnly = false)
    public void updateStatus(StProductBill stProductBill) {
        super.updateStatus(stProductBill);
    }

    /**
     * 删除数据
     *
     * @param stProductBill
     */
    @Override
    @Transactional(readOnly = false)
    public void delete(StProductBill stProductBill) {
        super.delete(stProductBill);
        StProductBillBatchDetail stProductBillBatchDetail = new StProductBillBatchDetail();
        stProductBillBatchDetail.setParentId(stProductBill);
        stProductBillBatchDetailDao.deleteByEntity(stProductBillBatchDetail);
        StProductBillDetail stProductBillDetail = new StProductBillDetail();
        stProductBillDetail.setParentId(stProductBill);
        stProductBillDetailDao.deleteByEntity(stProductBillDetail);
    }

}